Cargando paquetes

Rutas


raw_data <- here("data", "raw")
interim_data <- here("data", "interim")
processed_data <- here("data", "processed")

Leyendo bases

base <- readRDS(file=paste0(processed_data,"/base_final.Rds"))

base <- base %>%
  mutate(objetivo = factor(if_else(objetivo==0, "bueno", "malo")))

head(base)

Tarea de aprendizaje

Definicion

task_tarj = TaskClassif$new(id = "tarjetas", backend = base, target = "objetivo")
print(task_tarj)
<TaskClassif:tarjetas> (14500 x 9)
* Target: objetivo
* Properties: twoclass
* Features (8):
  - dbl (4): coeficiente_solvencia, edad, limite_tarjeta_credito, saldo_tarjeta
  - fct (4): estado_civil, genero, profesion, tipo_ingresos
#autoplot(task_tarj$select(c("saldo_tarjeta", "coeficiente_solvencia", "edad", "limite_tarjeta_credito")), type = "pairs")
#task_tarj = TaskClassif$new(id = "tarjetas", backend = base, target = "objetivo")

Modelos

Lista de modelos


lrn_rpart = lrn("classif.rpart", predict_type = "prob")
lrn_glmnet = lrn("classif.glmnet", predict_type = "prob")
lrn_knn = lrn("classif.kknn", predict_type = "prob")
lrn_lda = lrn("classif.lda", predict_type = "prob")
lrn_nnet = lrn("classif.nnet", predict_type = "prob")
lrn_rf = lrn("classif.ranger", predict_type = "prob")
lrn_svm = lrn("classif.svm", predict_type = "prob")
lrn_xgboost = lrn("classif.xgboost", predict_type = "prob")

Separacion de training y testing

set.seed(34678)
train_set = sample(task_tarj$nrow, 0.8 * task_tarj$nrow)
test_set = setdiff(seq_len(task_tarj$nrow), train_set)

Benchmark

Prepracion de datos para el benchmark

Punto de corte: 0.5

#th = prop.table(table(base$objetivo))[1]
th = .5
impute_fcts <- po("imputemode", affect_columns = selector_type("factor"))
impute_nums <- po("imputehist", affect_columns = selector_type("numeric"))
encode <- po("encode", affect_columns = selector_type("factor"))
threshold <- po("threshold", param_vals = list(thresholds = th))

pre_procesamiento <- impute_fcts %>>% 
  impute_nums %>>% 
  encode

lrn_rpart$predict_type = "prob"
lrn_glmnet$predict_type = "prob"
lrn_knn$predict_type = "prob"
lrn_lda$predict_type = "prob"
lrn_nnet$predict_type = "prob"
lrn_rf$predict_type = "prob"
lrn_svm$predict_type = "prob"
lrn_xgboost$predict_type = "prob"

lrn_rpart <- GraphLearner$new(pre_procesamiento %>>% po(lrn_rpart) %>>% threshold) 
lrn_glmnet <- GraphLearner$new(pre_procesamiento %>>% po(lrn_glmnet) %>>% threshold) 
lrn_knn <- GraphLearner$new(pre_procesamiento %>>% po(lrn_knn) %>>% threshold) 
lrn_lda <- GraphLearner$new(pre_procesamiento %>>% po(lrn_lda) %>>% threshold) 
lrn_nnet <- GraphLearner$new(pre_procesamiento %>>% po(lrn_nnet) %>>% threshold) 
lrn_rf <- GraphLearner$new(pre_procesamiento %>>% po(lrn_rf) %>>% threshold) 
lrn_svm <- GraphLearner$new(pre_procesamiento %>>% po(lrn_svm) %>>% threshold) 
lrn_xgboost <- GraphLearner$new(pre_procesamiento %>>% po(lrn_xgboost) %>>% threshold) 

lrn_rpart$predict_sets = c("train", "test")
lrn_glmnet$predict_sets = c("train", "test")
lrn_knn$predict_sets = c("train", "test")
lrn_lda$predict_sets = c("train", "test")
#lrn_log_reg$predict_sets = c("train", "test")
lrn_nnet$predict_sets = c("train", "test")
lrn_rf$predict_sets = c("train", "test")
lrn_svm$predict_sets = c("train", "test")
lrn_xgboost$predict_sets = c("train", "test")

lrn_rpart$id = "Árbol"
lrn_glmnet$id = "Reg-reg"
lrn_knn$id = "K-vecinos"
lrn_lda$id = "LDA"
#lrn_log_reg$id = "Reg-log"
lrn_nnet$id = "Red-Neur"
lrn_rf$id = "RandomForest"
lrn_svm$id = "SVM"
lrn_xgboost$id = "XGBoost"

learners = list(
  lrn_rpart,
  lrn_glmnet,
  lrn_knn,
  lrn_lda,
  #lrn_log_reg,
  lrn_nnet,
  lrn_rf,
  lrn_svm,
  lrn_xgboost
)

Defincion del benchmark

resamplings = rsmp("cv", folds = 10)

design = benchmark_grid(task_tarj, learners, resamplings)

Ejecucion

future::plan("multiprocess")
bmr = benchmark(design)
INFO  [23:50:10.784] Benchmark with 80 resampling iterations 
INFO  [23:50:14.063] Applying learner 'XGBoost' on task 'tarjetas' (iter 5/10) 
INFO  [23:50:16.315] Applying learner 'SVM' on task 'tarjetas' (iter 1/10) 
INFO  [23:56:22.533] Applying learner 'Reg-reg' on task 'tarjetas' (iter 8/10) 
INFO  [23:56:27.216] Applying learner 'LDA' on task 'tarjetas' (iter 4/10) 
INFO  [23:56:31.113] Applying learner 'XGBoost' on task 'tarjetas' (iter 2/10) 
INFO  [23:56:36.015] Applying learner 'LDA' on task 'tarjetas' (iter 9/10) 
INFO  [23:56:39.786] Applying learner 'SVM' on task 'tarjetas' (iter 7/10) 
INFO  [00:02:44.509] Applying learner 'Reg-reg' on task 'tarjetas' (iter 5/10) 
INFO  [00:02:47.114] Applying learner 'K-vecinos' on task 'tarjetas' (iter 9/10) 
INFO  [00:03:04.866] Applying learner 'Árbol' on task 'tarjetas' (iter 6/10) 
INFO  [00:03:07.940] Applying learner 'LDA' on task 'tarjetas' (iter 10/10) 
INFO  [00:03:10.788] Applying learner 'LDA' on task 'tarjetas' (iter 1/10) 
INFO  [00:03:13.028] Applying learner 'SVM' on task 'tarjetas' (iter 5/10) 
INFO  [00:07:25.607] Applying learner 'Red-Neur' on task 'tarjetas' (iter 6/10) 
# weights:  88
initial  value 8864.344041 
iter  10 value 3550.653729
iter  20 value 3525.984748
iter  30 value 3524.750652
iter  40 value 3517.336095
iter  50 value 3504.527029
iter  60 value 3490.270601
iter  70 value 3488.355126
final  value 3488.124393 
converged
INFO  [00:07:29.608] Applying learner 'Red-Neur' on task 'tarjetas' (iter 7/10) 
# weights:  88
initial  value 9808.686149 
final  value 3655.011275 
converged
INFO  [00:07:32.254] Applying learner 'LDA' on task 'tarjetas' (iter 2/10) 
INFO  [00:07:34.883] Applying learner 'Red-Neur' on task 'tarjetas' (iter 9/10) 
# weights:  88
initial  value 18674.516815 
iter  10 value 3562.604417
final  value 3562.604078 
converged
INFO  [00:07:37.665] Applying learner 'RandomForest' on task 'tarjetas' (iter 6/10) 
INFO  [00:07:58.589] Applying learner 'Reg-reg' on task 'tarjetas' (iter 4/10) 
INFO  [00:08:01.589] Applying learner 'LDA' on task 'tarjetas' (iter 3/10) 
INFO  [23:50:17.833] Applying learner 'LDA' on task 'tarjetas' (iter 8/10) 
INFO  [23:50:20.946] Applying learner 'Árbol' on task 'tarjetas' (iter 10/10) 
INFO  [23:50:24.874] Applying learner 'Reg-reg' on task 'tarjetas' (iter 9/10) 
INFO  [23:50:29.407] Applying learner 'Árbol' on task 'tarjetas' (iter 8/10) 
INFO  [23:50:32.711] Applying learner 'K-vecinos' on task 'tarjetas' (iter 10/10) 
INFO  [23:51:07.466] Applying learner 'K-vecinos' on task 'tarjetas' (iter 3/10) 
INFO  [23:51:48.976] Applying learner 'RandomForest' on task 'tarjetas' (iter 7/10) 
INFO  [23:52:24.909] Applying learner 'XGBoost' on task 'tarjetas' (iter 6/10) 
INFO  [23:52:35.543] Applying learner 'RandomForest' on task 'tarjetas' (iter 10/10) 
INFO  [23:53:07.382] Applying learner 'Red-Neur' on task 'tarjetas' (iter 8/10) 
# weights:  88
initial  value 5082.615183 
final  value 3662.311866 
converged
INFO  [23:53:11.597] Applying learner 'Red-Neur' on task 'tarjetas' (iter 3/10) 
# weights:  88
initial  value 7879.719197 
final  value 3659.879369 
converged
INFO  [23:53:19.135] Applying learner 'Red-Neur' on task 'tarjetas' (iter 10/10) 
# weights:  88
initial  value 9476.761085 
final  value 3663.376169 
converged
INFO  [23:53:30.673] Applying learner 'LDA' on task 'tarjetas' (iter 7/10) 
INFO  [23:53:36.488] Applying learner 'Reg-reg' on task 'tarjetas' (iter 2/10) 
INFO  [23:53:41.171] Applying learner 'K-vecinos' on task 'tarjetas' (iter 4/10) 
INFO  [23:54:21.684] Applying learner 'XGBoost' on task 'tarjetas' (iter 3/10) 
INFO  [23:54:26.860] Applying learner 'Reg-reg' on task 'tarjetas' (iter 1/10) 
INFO  [23:54:30.616] Applying learner 'Reg-reg' on task 'tarjetas' (iter 3/10) 
INFO  [23:54:34.528] Applying learner 'SVM' on task 'tarjetas' (iter 10/10) 
INFO  [00:00:52.048] Applying learner 'LDA' on task 'tarjetas' (iter 6/10) 
INFO  [23:50:23.251] Applying learner 'K-vecinos' on task 'tarjetas' (iter 7/10) 
INFO  [23:50:52.926] Applying learner 'K-vecinos' on task 'tarjetas' (iter 8/10) 
INFO  [23:51:38.823] Applying learner 'Árbol' on task 'tarjetas' (iter 4/10) 
INFO  [23:51:45.445] Applying learner 'Red-Neur' on task 'tarjetas' (iter 4/10) 
# weights:  88
initial  value 8002.400008 
final  value 3606.101478 
converged
INFO  [23:51:49.606] Applying learner 'RandomForest' on task 'tarjetas' (iter 2/10) 
INFO  [23:52:28.852] Applying learner 'RandomForest' on task 'tarjetas' (iter 9/10) 
INFO  [23:53:02.872] Applying learner 'SVM' on task 'tarjetas' (iter 8/10) 
INFO  [23:59:07.758] Applying learner 'RandomForest' on task 'tarjetas' (iter 1/10) 
INFO  [23:59:41.717] Applying learner 'SVM' on task 'tarjetas' (iter 3/10) 
INFO  [00:04:27.012] Applying learner 'Reg-reg' on task 'tarjetas' (iter 10/10) 
INFO  [00:04:30.017] Applying learner 'RandomForest' on task 'tarjetas' (iter 4/10) 
INFO  [00:04:49.971] Applying learner 'Árbol' on task 'tarjetas' (iter 2/10) 
INFO  [00:04:52.604] Applying learner 'Reg-reg' on task 'tarjetas' (iter 7/10) 
INFO  [00:04:55.364] Applying learner 'XGBoost' on task 'tarjetas' (iter 8/10) 
INFO  [00:04:57.694] Applying learner 'XGBoost' on task 'tarjetas' (iter 9/10) 
INFO  [00:04:59.565] Applying learner 'SVM' on task 'tarjetas' (iter 4/10) 
INFO  [00:08:56.617] Applying learner 'SVM' on task 'tarjetas' (iter 9/10) 
INFO  [00:11:04.333] Applying learner 'Red-Neur' on task 'tarjetas' (iter 2/10) 
# weights:  88
initial  value 8668.465816 
final  value 3647.701370 
converged
INFO  [00:11:05.166] Applying learner 'Árbol' on task 'tarjetas' (iter 5/10) 
INFO  [00:11:06.497] Applying learner 'SVM' on task 'tarjetas' (iter 2/10) 
INFO  [23:50:29.282] Applying learner 'K-vecinos' on task 'tarjetas' (iter 5/10) 
INFO  [23:51:05.179] Applying learner 'Árbol' on task 'tarjetas' (iter 3/10) 
INFO  [23:51:10.309] Applying learner 'XGBoost' on task 'tarjetas' (iter 7/10) 
INFO  [23:51:14.753] Applying learner 'K-vecinos' on task 'tarjetas' (iter 6/10) 
INFO  [23:52:07.934] Applying learner 'RandomForest' on task 'tarjetas' (iter 8/10) 
INFO  [23:52:46.460] Applying learner 'Árbol' on task 'tarjetas' (iter 9/10) 
INFO  [23:53:00.419] Applying learner 'Árbol' on task 'tarjetas' (iter 1/10) 
INFO  [23:53:06.782] Applying learner 'XGBoost' on task 'tarjetas' (iter 1/10) 
INFO  [23:53:11.900] Applying learner 'RandomForest' on task 'tarjetas' (iter 3/10) 
INFO  [23:53:39.734] Applying learner 'Red-Neur' on task 'tarjetas' (iter 5/10) 
# weights:  88
initial  value 12571.518812 
final  value 3650.139041 
converged
INFO  [23:53:43.521] Applying learner 'RandomForest' on task 'tarjetas' (iter 5/10) 
INFO  [23:54:09.447] Applying learner 'XGBoost' on task 'tarjetas' (iter 4/10) 
INFO  [23:54:12.300] Applying learner 'LDA' on task 'tarjetas' (iter 5/10) 
INFO  [23:54:17.259] Applying learner 'XGBoost' on task 'tarjetas' (iter 10/10) 
INFO  [23:54:21.053] Applying learner 'SVM' on task 'tarjetas' (iter 6/10) 
INFO  [00:00:35.066] Applying learner 'Reg-reg' on task 'tarjetas' (iter 6/10) 
INFO  [00:00:40.833] Applying learner 'Árbol' on task 'tarjetas' (iter 7/10) 
INFO  [00:00:46.219] Applying learner 'K-vecinos' on task 'tarjetas' (iter 1/10) 
INFO  [00:01:22.990] Applying learner 'Red-Neur' on task 'tarjetas' (iter 1/10) 
# weights:  88
initial  value 8686.105637 
iter  10 value 3586.420021
iter  10 value 3586.420021
iter  10 value 3586.420021
final  value 3586.420021 
converged
INFO  [00:01:26.143] Applying learner 'K-vecinos' on task 'tarjetas' (iter 2/10) 
INFO  [00:12:34.718] Finished benchmark 

Medidas

costs = matrix(c(0, 2, 3, -1), nrow = 2)
dimnames(costs) = list(response = c("bueno", "malo"), truth = c("bueno", "malo"))
cost_measure = msr("classif.costs", costs = costs)
measures = list(
  msr("classif.acc", id = "acc_train", predict_sets = "train"),
  msr("classif.acc", id = "acc_test"),
  msr("classif.ppv", id = "ppv_train", predict_sets = "train"),
  msr("classif.ppv", id = "ppv_test"),
  msr("classif.tpr", id = "tpr_train", predict_sets = "train"),
  msr("classif.tpr", id = "tpr_test"),
  msr("classif.costs", costs = costs, id = "cost_train", predict_sets = "train"),
  msr("classif.costs", costs = costs, id = "cost_test")
)

bmr$aggregate(measures)
NA

tab = bmr$aggregate(measures)

ranks = tab[, .(learner_id, rank_train = rank(-acc_train), rank_test = rank(-acc_test)), by = task_id]
print(ranks)

Graficos comparativos

autoplot(bmr$clone(deep = TRUE), type = "roc")

Area bajo la curva de ROC

autoplot(bmr, measure = msr("classif.auc")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Precision

autoplot(bmr, measure = msr("classif.acc")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Sensitividad (tpr)

autoplot(bmr, measure = msr("classif.tpr")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Precicsion (ppv)

autoplot(bmr, measure = msr("classif.ppv")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Costo

autoplot(bmr, measure = cost_measure) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Punto de corte: 0.92

th2 = prop.table(table(base$objetivo))[1]

threshold2 <- po("threshold", param_vals = list(thresholds = th2))

lrn_rpart = lrn("classif.rpart", predict_type = "prob")
lrn_glmnet = lrn("classif.glmnet", predict_type = "prob")
lrn_knn = lrn("classif.kknn", predict_type = "prob")
lrn_lda = lrn("classif.lda", predict_type = "prob")
lrn_nnet = lrn("classif.nnet", predict_type = "prob")
lrn_rf = lrn("classif.ranger", predict_type = "prob")
lrn_svm = lrn("classif.svm", predict_type = "prob")
lrn_xgboost = lrn("classif.xgboost", predict_type = "prob")

lrn_rpart <- GraphLearner$new(pre_procesamiento %>>% po(lrn_rpart) %>>% threshold2) 
lrn_glmnet <- GraphLearner$new(pre_procesamiento %>>% po(lrn_glmnet) %>>% threshold2) 
lrn_knn <- GraphLearner$new(pre_procesamiento %>>% po(lrn_knn) %>>% threshold2) 
lrn_lda <- GraphLearner$new(pre_procesamiento %>>% po(lrn_lda) %>>% threshold2) 
lrn_nnet <- GraphLearner$new(pre_procesamiento %>>% po(lrn_nnet) %>>% threshold2) 
lrn_rf <- GraphLearner$new(pre_procesamiento %>>% po(lrn_rf) %>>% threshold2) 
lrn_svm <- GraphLearner$new(pre_procesamiento %>>% po(lrn_svm) %>>% threshold2) 
lrn_xgboost <- GraphLearner$new(pre_procesamiento %>>% po(lrn_xgboost) %>>% threshold2) 

lrn_rpart$predict_sets = c("train", "test")
lrn_glmnet$predict_sets = c("train", "test")
lrn_knn$predict_sets = c("train", "test")
lrn_lda$predict_sets = c("train", "test")
#lrn_log_reg$predict_sets = c("train", "test")
lrn_nnet$predict_sets = c("train", "test")
lrn_rf$predict_sets = c("train", "test")
lrn_svm$predict_sets = c("train", "test")
lrn_xgboost$predict_sets = c("train", "test")

lrn_rpart$id = "Árbol"
lrn_glmnet$id = "Reg-reg"
lrn_knn$id = "K-vecinos"
lrn_lda$id = "LDA"
#lrn_log_reg$id = "Reg-log"
lrn_nnet$id = "Red-Neur"
lrn_rf$id = "RandomForest"
lrn_svm$id = "SVM"
lrn_xgboost$id = "XGBoost"

learners2 = list(
  lrn_rpart,
  lrn_glmnet,
  lrn_knn,
  lrn_lda,
  #lrn_log_reg,
  lrn_nnet,
  lrn_rf,
  lrn_svm,
  lrn_xgboost
)

Defincion del benchmark

design2 = benchmark_grid(task_tarj, learners2, resamplings)

Ejecucion

future::plan("multiprocess")
bmr2 = benchmark(design2)
INFO  [00:24:12.327] Benchmark with 80 resampling iterations 
INFO  [00:24:17.517] Applying learner 'Árbol' on task 'tarjetas' (iter 10/10) 
INFO  [00:24:21.477] Applying learner 'Reg-reg' on task 'tarjetas' (iter 9/10) 
INFO  [00:24:25.803] Applying learner 'Red-Neur' on task 'tarjetas' (iter 10/10) 
# weights:  88
initial  value 11625.711555 
final  value 3635.497434 
converged
INFO  [00:24:33.725] Applying learner 'LDA' on task 'tarjetas' (iter 3/10) 
INFO  [00:24:48.144] Applying learner 'Reg-reg' on task 'tarjetas' (iter 3/10) 
INFO  [00:24:58.981] Applying learner 'LDA' on task 'tarjetas' (iter 2/10) 
INFO  [00:25:07.498] Applying learner 'K-vecinos' on task 'tarjetas' (iter 6/10) 
INFO  [00:26:08.730] Applying learner 'XGBoost' on task 'tarjetas' (iter 7/10) 
INFO  [00:26:17.460] Applying learner 'Red-Neur' on task 'tarjetas' (iter 3/10) 
# weights:  88
initial  value 12101.686254 
iter  10 value 3657.917305
final  value 3657.916264 
converged
INFO  [00:26:29.894] Applying learner 'Árbol' on task 'tarjetas' (iter 2/10) 
INFO  [00:26:35.894] Applying learner 'LDA' on task 'tarjetas' (iter 4/10) 
INFO  [00:26:43.793] Applying learner 'Árbol' on task 'tarjetas' (iter 6/10) 
INFO  [00:26:48.033] Applying learner 'LDA' on task 'tarjetas' (iter 10/10) 
INFO  [00:26:52.143] Applying learner 'Red-Neur' on task 'tarjetas' (iter 7/10) 
# weights:  88
initial  value 5440.152022 
iter  10 value 3679.826099
iter  10 value 3679.826099
iter  10 value 3679.826099
final  value 3679.826099 
converged
INFO  [00:27:05.688] Applying learner 'Red-Neur' on task 'tarjetas' (iter 5/10) 
# weights:  88
initial  value 10042.159733 
final  value 3652.575676 
converged
INFO  [00:27:12.426] Applying learner 'Árbol' on task 'tarjetas' (iter 9/10) 
INFO  [00:27:20.137] Applying learner 'Red-Neur' on task 'tarjetas' (iter 9/10) 
# weights:  88
initial  value 14893.529206 
final  value 3623.267446 
converged
INFO  [00:27:24.532] Applying learner 'SVM' on task 'tarjetas' (iter 8/10) 
INFO  [00:32:52.073] Applying learner 'LDA' on task 'tarjetas' (iter 7/10) 
INFO  [00:32:55.575] Applying learner 'Reg-reg' on task 'tarjetas' (iter 4/10) 
INFO  [00:24:23.333] Applying learner 'Reg-reg' on task 'tarjetas' (iter 8/10) 
INFO  [00:24:31.162] Applying learner 'RandomForest' on task 'tarjetas' (iter 2/10) 
INFO  [00:25:07.289] Applying learner 'SVM' on task 'tarjetas' (iter 5/10) 
INFO  [00:31:27.284] Applying learner 'K-vecinos' on task 'tarjetas' (iter 8/10) 
INFO  [00:31:56.834] Applying learner 'Red-Neur' on task 'tarjetas' (iter 8/10) 
# weights:  88
initial  value 12793.530996 
final  value 3642.822915 
converged
INFO  [00:32:00.262] Applying learner 'SVM' on task 'tarjetas' (iter 4/10) 
INFO  [00:35:11.166] Applying learner 'K-vecinos' on task 'tarjetas' (iter 2/10) 
INFO  [00:35:35.269] Applying learner 'RandomForest' on task 'tarjetas' (iter 8/10) 
INFO  [00:35:51.404] Applying learner 'SVM' on task 'tarjetas' (iter 10/10) 
INFO  [00:38:52.697] Applying learner 'SVM' on task 'tarjetas' (iter 9/10) 
INFO  [00:41:39.131] Applying learner 'Red-Neur' on task 'tarjetas' (iter 6/10) 
# weights:  88
initial  value 7517.593780 
final  value 3639.292644 
converged
INFO  [00:41:41.087] Applying learner 'RandomForest' on task 'tarjetas' (iter 1/10) 
INFO  [00:41:52.117] Applying learner 'LDA' on task 'tarjetas' (iter 1/10) 
INFO  [00:41:53.842] Applying learner 'XGBoost' on task 'tarjetas' (iter 2/10) 
INFO  [00:41:55.283] Applying learner 'SVM' on task 'tarjetas' (iter 3/10) 
INFO  [00:44:28.708] Applying learner 'XGBoost' on task 'tarjetas' (iter 9/10) 
INFO  [00:44:30.724] Applying learner 'SVM' on task 'tarjetas' (iter 2/10) 
INFO  [00:46:52.024] Applying learner 'K-vecinos' on task 'tarjetas' (iter 10/10) 
INFO  [00:47:01.426] Applying learner 'Reg-reg' on task 'tarjetas' (iter 6/10) 
INFO  [00:47:03.167] Applying learner 'LDA' on task 'tarjetas' (iter 8/10) 
INFO  [00:24:25.124] Applying learner 'SVM' on task 'tarjetas' (iter 6/10) 
INFO  [00:30:51.372] Applying learner 'Reg-reg' on task 'tarjetas' (iter 2/10) 
INFO  [00:31:00.120] Applying learner 'SVM' on task 'tarjetas' (iter 7/10) 
INFO  [00:34:48.030] Applying learner 'XGBoost' on task 'tarjetas' (iter 10/10) 
INFO  [00:34:50.414] Applying learner 'XGBoost' on task 'tarjetas' (iter 6/10) 
INFO  [00:34:52.840] Applying learner 'Árbol' on task 'tarjetas' (iter 8/10) 
INFO  [00:34:54.434] Applying learner 'K-vecinos' on task 'tarjetas' (iter 4/10) 
INFO  [00:35:10.492] Applying learner 'Árbol' on task 'tarjetas' (iter 5/10) 
INFO  [00:35:11.904] Applying learner 'RandomForest' on task 'tarjetas' (iter 9/10) 
INFO  [00:35:28.633] Applying learner 'Reg-reg' on task 'tarjetas' (iter 7/10) 
INFO  [00:35:31.072] Applying learner 'Reg-reg' on task 'tarjetas' (iter 1/10) 
INFO  [00:35:32.290] Applying learner 'Árbol' on task 'tarjetas' (iter 4/10) 
INFO  [00:35:34.866] Applying learner 'SVM' on task 'tarjetas' (iter 1/10) 
INFO  [00:38:32.782] Applying learner 'K-vecinos' on task 'tarjetas' (iter 5/10) 
INFO  [00:38:49.966] Applying learner 'Árbol' on task 'tarjetas' (iter 3/10) 
INFO  [00:38:51.862] Applying learner 'XGBoost' on task 'tarjetas' (iter 5/10) 
INFO  [00:38:53.758] Applying learner 'K-vecinos' on task 'tarjetas' (iter 9/10) 
INFO  [00:39:07.191] Applying learner 'K-vecinos' on task 'tarjetas' (iter 3/10) 
INFO  [00:39:17.857] Applying learner 'K-vecinos' on task 'tarjetas' (iter 1/10) 
INFO  [00:39:29.988] Applying learner 'RandomForest' on task 'tarjetas' (iter 3/10) 
INFO  [00:24:44.361] Applying learner 'XGBoost' on task 'tarjetas' (iter 4/10) 
INFO  [00:24:55.859] Applying learner 'XGBoost' on task 'tarjetas' (iter 1/10) 
INFO  [00:25:05.128] Applying learner 'XGBoost' on task 'tarjetas' (iter 3/10) 
INFO  [00:25:09.376] Applying learner 'Árbol' on task 'tarjetas' (iter 1/10) 
INFO  [00:25:12.476] Applying learner 'LDA' on task 'tarjetas' (iter 5/10) 
INFO  [00:25:22.844] Applying learner 'LDA' on task 'tarjetas' (iter 6/10) 
INFO  [00:25:29.579] Applying learner 'LDA' on task 'tarjetas' (iter 9/10) 
INFO  [00:25:36.197] Applying learner 'Red-Neur' on task 'tarjetas' (iter 2/10) 
# weights:  88
initial  value 8212.383066 
iter  10 value 3608.589924
iter  10 value 3608.589910
iter  10 value 3608.589910
final  value 3608.589910 
converged
INFO  [00:25:41.514] Applying learner 'RandomForest' on task 'tarjetas' (iter 5/10) 
INFO  [00:26:12.110] Applying learner 'RandomForest' on task 'tarjetas' (iter 10/10) 
INFO  [00:26:42.985] Applying learner 'XGBoost' on task 'tarjetas' (iter 8/10) 
INFO  [00:26:46.724] Applying learner 'Reg-reg' on task 'tarjetas' (iter 10/10) 
INFO  [00:26:51.692] Applying learner 'RandomForest' on task 'tarjetas' (iter 7/10) 
INFO  [00:27:19.786] Applying learner 'Árbol' on task 'tarjetas' (iter 7/10) 
INFO  [00:27:23.742] Applying learner 'Reg-reg' on task 'tarjetas' (iter 5/10) 
INFO  [00:27:27.794] Applying learner 'RandomForest' on task 'tarjetas' (iter 4/10) 
INFO  [00:27:56.810] Applying learner 'K-vecinos' on task 'tarjetas' (iter 7/10) 
INFO  [00:28:44.057] Applying learner 'Red-Neur' on task 'tarjetas' (iter 1/10) 
# weights:  88
initial  value 9033.379771 
iter  10 value 3646.630469
final  value 3646.625756 
converged
INFO  [00:28:50.297] Applying learner 'RandomForest' on task 'tarjetas' (iter 6/10) 
INFO  [00:29:17.817] Applying learner 'Red-Neur' on task 'tarjetas' (iter 4/10) 
# weights:  88
initial  value 10277.717590 
final  value 3652.575676 
converged
INFO  [00:47:04.747] Finished benchmark 

Medidas


bmr2$aggregate(measures)
NA

tab2 = bmr2$aggregate(measures)

ranks2 = tab2[, .(learner_id, rank_train = rank(-acc_train), rank_test = rank(-acc_test)), by = task_id]
print(ranks2)

Graficos comparativos

autoplot(bmr2$clone(deep = TRUE), type = "roc")

Area bajo la curva de ROC

autoplot(bmr2, measure = msr("classif.auc")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Precision

autoplot(bmr2, measure = msr("classif.acc")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Sensitividad (tpr)

autoplot(bmr2, measure = msr("classif.tpr")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Precicsion (ppv)

autoplot(bmr2, measure = msr("classif.ppv")) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

Costo

autoplot(bmr2, measure = cost_measure) + 
           theme(axis.text.x = element_text(angle = 45, hjust = 1))

NA
NA

# lrn_rf_2 = lrn_rf
# 
# lrn_rf_2$train(task_tarj, row_ids = train_set)
# pred_fr = lrn_rf_2$predict(task_tarj, row_ids = test_set)
# 
# pred_fr$confusion

# lrn_xgboost_2 = lrn_xgboost
# 
# lrn_xgboost_2$train(task_tarj, row_ids = train_set)
# pred_xg = lrn_xgboost_2$predict(task_tarj, row_ids = test_set, )
# 
# pred_xg$confusion
LS0tCnRpdGxlOiAiQmVuY2htYXJrIGRlIG1vZGVsbyIKYXV0aG9yOiAiTWlndWVsIENvdG8gR2FyY2lhIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpDYXJnYW5kbyBwYXF1ZXRlcwpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQoKbGlicmFyeShoZXJlKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShtbHIzKQpsaWJyYXJ5KCJtbHIzdml6IikKbGlicmFyeSgibWxyM2xlYXJuZXJzIikKbGlicmFyeShtbHIzcGlwZWxpbmVzKQpsaWJyYXJ5KG1scjNleHRyYWxlYXJuZXJzKQpsaWJyYXJ5KCJtbHIzdHVuaW5nIikKYGBgCgojIFJ1dGFzCmBgYHtyfQoKcmF3X2RhdGEgPC0gaGVyZSgiZGF0YSIsICJyYXciKQppbnRlcmltX2RhdGEgPC0gaGVyZSgiZGF0YSIsICJpbnRlcmltIikKcHJvY2Vzc2VkX2RhdGEgPC0gaGVyZSgiZGF0YSIsICJwcm9jZXNzZWQiKQoKYGBgCgojIyBMZXllbmRvIGJhc2VzCmBgYHtyfQpiYXNlIDwtIHJlYWRSRFMoZmlsZT1wYXN0ZTAocHJvY2Vzc2VkX2RhdGEsIi9iYXNlX2ZpbmFsLlJkcyIpKQoKYmFzZSA8LSBiYXNlICU+JQogIG11dGF0ZShvYmpldGl2byA9IGZhY3RvcihpZl9lbHNlKG9iamV0aXZvPT0wLCAiYnVlbm8iLCAibWFsbyIpKSkKCmhlYWQoYmFzZSkKYGBgCgojIFRhcmVhIGRlIGFwcmVuZGl6YWplCiMjIERlZmluaWNpb24KYGBge3J9CnRhc2tfdGFyaiA9IFRhc2tDbGFzc2lmJG5ldyhpZCA9ICJ0YXJqZXRhcyIsIGJhY2tlbmQgPSBiYXNlLCB0YXJnZXQgPSAib2JqZXRpdm8iKQpwcmludCh0YXNrX3RhcmopCmBgYAoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNhdXRvcGxvdCh0YXNrX3Rhcmokc2VsZWN0KGMoInNhbGRvX3RhcmpldGEiLCAiY29lZmljaWVudGVfc29sdmVuY2lhIiwgImVkYWQiLCAibGltaXRlX3RhcmpldGFfY3JlZGl0byIpKSwgdHlwZSA9ICJwYWlycyIpCiN0YXNrX3RhcmogPSBUYXNrQ2xhc3NpZiRuZXcoaWQgPSAidGFyamV0YXMiLCBiYWNrZW5kID0gYmFzZSwgdGFyZ2V0ID0gIm9iamV0aXZvIikKYGBgCgojIE1vZGVsb3MKCiMjIExpc3RhIGRlIG1vZGVsb3MKCmBgYHtyfQoKbHJuX3JwYXJ0ID0gbHJuKCJjbGFzc2lmLnJwYXJ0IiwgcHJlZGljdF90eXBlID0gInByb2IiKQpscm5fZ2xtbmV0ID0gbHJuKCJjbGFzc2lmLmdsbW5ldCIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX2tubiA9IGxybigiY2xhc3NpZi5ra25uIiwgcHJlZGljdF90eXBlID0gInByb2IiKQpscm5fbGRhID0gbHJuKCJjbGFzc2lmLmxkYSIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX25uZXQgPSBscm4oImNsYXNzaWYubm5ldCIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX3JmID0gbHJuKCJjbGFzc2lmLnJhbmdlciIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX3N2bSA9IGxybigiY2xhc3NpZi5zdm0iLCBwcmVkaWN0X3R5cGUgPSAicHJvYiIpCmxybl94Z2Jvb3N0ID0gbHJuKCJjbGFzc2lmLnhnYm9vc3QiLCBwcmVkaWN0X3R5cGUgPSAicHJvYiIpCgpgYGAKCiMjIFNlcGFyYWNpb24gZGUgdHJhaW5pbmcgeSB0ZXN0aW5nCmBgYHtyfQpzZXQuc2VlZCgzNDY3OCkKdHJhaW5fc2V0ID0gc2FtcGxlKHRhc2tfdGFyaiRucm93LCAwLjggKiB0YXNrX3RhcmokbnJvdykKdGVzdF9zZXQgPSBzZXRkaWZmKHNlcV9sZW4odGFza190YXJqJG5yb3cpLCB0cmFpbl9zZXQpCmBgYAoKCiMgQmVuY2htYXJrCgojIyBQcmVwcmFjaW9uIGRlIGRhdG9zIHBhcmEgZWwgYmVuY2htYXJrCiMjIyBQdW50byBkZSBjb3J0ZTogMC41CmBgYHtyfQojdGggPSBwcm9wLnRhYmxlKHRhYmxlKGJhc2Ukb2JqZXRpdm8pKVsxXQp0aCA9IC41CmltcHV0ZV9mY3RzIDwtIHBvKCJpbXB1dGVtb2RlIiwgYWZmZWN0X2NvbHVtbnMgPSBzZWxlY3Rvcl90eXBlKCJmYWN0b3IiKSkKaW1wdXRlX251bXMgPC0gcG8oImltcHV0ZWhpc3QiLCBhZmZlY3RfY29sdW1ucyA9IHNlbGVjdG9yX3R5cGUoIm51bWVyaWMiKSkKZW5jb2RlIDwtIHBvKCJlbmNvZGUiLCBhZmZlY3RfY29sdW1ucyA9IHNlbGVjdG9yX3R5cGUoImZhY3RvciIpKQp0aHJlc2hvbGQgPC0gcG8oInRocmVzaG9sZCIsIHBhcmFtX3ZhbHMgPSBsaXN0KHRocmVzaG9sZHMgPSB0aCkpCgpwcmVfcHJvY2VzYW1pZW50byA8LSBpbXB1dGVfZmN0cyAlPj4lIAogIGltcHV0ZV9udW1zICU+PiUgCiAgZW5jb2RlCgpscm5fcnBhcnQkcHJlZGljdF90eXBlID0gInByb2IiCmxybl9nbG1uZXQkcHJlZGljdF90eXBlID0gInByb2IiCmxybl9rbm4kcHJlZGljdF90eXBlID0gInByb2IiCmxybl9sZGEkcHJlZGljdF90eXBlID0gInByb2IiCmxybl9ubmV0JHByZWRpY3RfdHlwZSA9ICJwcm9iIgpscm5fcmYkcHJlZGljdF90eXBlID0gInByb2IiCmxybl9zdm0kcHJlZGljdF90eXBlID0gInByb2IiCmxybl94Z2Jvb3N0JHByZWRpY3RfdHlwZSA9ICJwcm9iIgoKbHJuX3JwYXJ0IDwtIEdyYXBoTGVhcm5lciRuZXcocHJlX3Byb2Nlc2FtaWVudG8gJT4+JSBwbyhscm5fcnBhcnQpICU+PiUgdGhyZXNob2xkKSAKbHJuX2dsbW5ldCA8LSBHcmFwaExlYXJuZXIkbmV3KHByZV9wcm9jZXNhbWllbnRvICU+PiUgcG8obHJuX2dsbW5ldCkgJT4+JSB0aHJlc2hvbGQpIApscm5fa25uIDwtIEdyYXBoTGVhcm5lciRuZXcocHJlX3Byb2Nlc2FtaWVudG8gJT4+JSBwbyhscm5fa25uKSAlPj4lIHRocmVzaG9sZCkgCmxybl9sZGEgPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl9sZGEpICU+PiUgdGhyZXNob2xkKSAKbHJuX25uZXQgPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl9ubmV0KSAlPj4lIHRocmVzaG9sZCkgCmxybl9yZiA8LSBHcmFwaExlYXJuZXIkbmV3KHByZV9wcm9jZXNhbWllbnRvICU+PiUgcG8obHJuX3JmKSAlPj4lIHRocmVzaG9sZCkgCmxybl9zdm0gPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl9zdm0pICU+PiUgdGhyZXNob2xkKSAKbHJuX3hnYm9vc3QgPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl94Z2Jvb3N0KSAlPj4lIHRocmVzaG9sZCkgCgpscm5fcnBhcnQkcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCmxybl9nbG1uZXQkcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCmxybl9rbm4kcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCmxybl9sZGEkcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCiNscm5fbG9nX3JlZyRwcmVkaWN0X3NldHMgPSBjKCJ0cmFpbiIsICJ0ZXN0IikKbHJuX25uZXQkcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCmxybl9yZiRwcmVkaWN0X3NldHMgPSBjKCJ0cmFpbiIsICJ0ZXN0IikKbHJuX3N2bSRwcmVkaWN0X3NldHMgPSBjKCJ0cmFpbiIsICJ0ZXN0IikKbHJuX3hnYm9vc3QkcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCgpscm5fcnBhcnQkaWQgPSAiw4FyYm9sIgpscm5fZ2xtbmV0JGlkID0gIlJlZy1yZWciCmxybl9rbm4kaWQgPSAiSy12ZWNpbm9zIgpscm5fbGRhJGlkID0gIkxEQSIKI2xybl9sb2dfcmVnJGlkID0gIlJlZy1sb2ciCmxybl9ubmV0JGlkID0gIlJlZC1OZXVyIgpscm5fcmYkaWQgPSAiUmFuZG9tRm9yZXN0Igpscm5fc3ZtJGlkID0gIlNWTSIKbHJuX3hnYm9vc3QkaWQgPSAiWEdCb29zdCIKCmxlYXJuZXJzID0gbGlzdCgKICBscm5fcnBhcnQsCiAgbHJuX2dsbW5ldCwKICBscm5fa25uLAogIGxybl9sZGEsCiAgI2xybl9sb2dfcmVnLAogIGxybl9ubmV0LAogIGxybl9yZiwKICBscm5fc3ZtLAogIGxybl94Z2Jvb3N0CikKCgpgYGAKCiMjIERlZmluY2lvbiBkZWwgYmVuY2htYXJrCmBgYHtyfQpyZXNhbXBsaW5ncyA9IHJzbXAoImN2IiwgZm9sZHMgPSAxMCkKCmRlc2lnbiA9IGJlbmNobWFya19ncmlkKHRhc2tfdGFyaiwgbGVhcm5lcnMsIHJlc2FtcGxpbmdzKQoKYGBgCgoKIyMgRWplY3VjaW9uCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZ1dHVyZTo6cGxhbigibXVsdGlwcm9jZXNzIikKCmJtciA9IGJlbmNobWFyayhkZXNpZ24pCmBgYAoKIyMgTWVkaWRhcwoKYGBge3J9CmNvc3RzID0gbWF0cml4KGMoMCwgMiwgMywgLTEpLCBucm93ID0gMikKZGltbmFtZXMoY29zdHMpID0gbGlzdChyZXNwb25zZSA9IGMoImJ1ZW5vIiwgIm1hbG8iKSwgdHJ1dGggPSBjKCJidWVubyIsICJtYWxvIikpCmNvc3RfbWVhc3VyZSA9IG1zcigiY2xhc3NpZi5jb3N0cyIsIGNvc3RzID0gY29zdHMpCgpgYGAKCgpgYGB7cn0KbWVhc3VyZXMgPSBsaXN0KAogIG1zcigiY2xhc3NpZi5hY2MiLCBpZCA9ICJhY2NfdHJhaW4iLCBwcmVkaWN0X3NldHMgPSAidHJhaW4iKSwKICBtc3IoImNsYXNzaWYuYWNjIiwgaWQgPSAiYWNjX3Rlc3QiKSwKICBtc3IoImNsYXNzaWYucHB2IiwgaWQgPSAicHB2X3RyYWluIiwgcHJlZGljdF9zZXRzID0gInRyYWluIiksCiAgbXNyKCJjbGFzc2lmLnBwdiIsIGlkID0gInBwdl90ZXN0IiksCiAgbXNyKCJjbGFzc2lmLnRwciIsIGlkID0gInRwcl90cmFpbiIsIHByZWRpY3Rfc2V0cyA9ICJ0cmFpbiIpLAogIG1zcigiY2xhc3NpZi50cHIiLCBpZCA9ICJ0cHJfdGVzdCIpLAogIG1zcigiY2xhc3NpZi5jb3N0cyIsIGNvc3RzID0gY29zdHMsIGlkID0gImNvc3RfdHJhaW4iLCBwcmVkaWN0X3NldHMgPSAidHJhaW4iKSwKICBtc3IoImNsYXNzaWYuY29zdHMiLCBjb3N0cyA9IGNvc3RzLCBpZCA9ICJjb3N0X3Rlc3QiKQopCgpibXIkYWdncmVnYXRlKG1lYXN1cmVzKQoKYGBgCgoKYGBge3J9Cgp0YWIgPSBibXIkYWdncmVnYXRlKG1lYXN1cmVzKQoKcmFua3MgPSB0YWJbLCAuKGxlYXJuZXJfaWQsIHJhbmtfdHJhaW4gPSByYW5rKC1hY2NfdHJhaW4pLCByYW5rX3Rlc3QgPSByYW5rKC1hY2NfdGVzdCkpLCBieSA9IHRhc2tfaWRdCnByaW50KHJhbmtzKQpgYGAKCiMjIEdyYWZpY29zIGNvbXBhcmF0aXZvcwoKCmBgYHtyfQphdXRvcGxvdChibXIkY2xvbmUoZGVlcCA9IFRSVUUpLCB0eXBlID0gInJvYyIpCgpgYGAKCgojIyMgQXJlYSBiYWpvIGxhIGN1cnZhIGRlIFJPQwpgYGB7cn0KYXV0b3Bsb3QoYm1yLCBtZWFzdXJlID0gbXNyKCJjbGFzc2lmLmF1YyIpKSArIAogICAgICAgICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpCgoKYGBgCgoKIyMjIFByZWNpc2lvbgpgYGB7cn0KYXV0b3Bsb3QoYm1yLCBtZWFzdXJlID0gbXNyKCJjbGFzc2lmLmFjYyIpKSArIAogICAgICAgICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpCgoKYGBgCgojIyMgU2Vuc2l0aXZpZGFkICh0cHIpCmBgYHtyfQphdXRvcGxvdChibXIsIG1lYXN1cmUgPSBtc3IoImNsYXNzaWYudHByIikpICsgCiAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKCgpgYGAKCiMjIyBQcmVjaWNzaW9uIChwcHYpCmBgYHtyfQphdXRvcGxvdChibXIsIG1lYXN1cmUgPSBtc3IoImNsYXNzaWYucHB2IikpICsgCiAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKCgpgYGAKIyMjIENvc3RvCmBgYHtyfQphdXRvcGxvdChibXIsIG1lYXN1cmUgPSBjb3N0X21lYXN1cmUpICsgCiAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKCgpgYGAKCiMjIyBQdW50byBkZSBjb3J0ZTogMC45MgpgYGB7cn0KdGgyID0gcHJvcC50YWJsZSh0YWJsZShiYXNlJG9iamV0aXZvKSlbMV0KCnRocmVzaG9sZDIgPC0gcG8oInRocmVzaG9sZCIsIHBhcmFtX3ZhbHMgPSBsaXN0KHRocmVzaG9sZHMgPSB0aDIpKQoKbHJuX3JwYXJ0ID0gbHJuKCJjbGFzc2lmLnJwYXJ0IiwgcHJlZGljdF90eXBlID0gInByb2IiKQpscm5fZ2xtbmV0ID0gbHJuKCJjbGFzc2lmLmdsbW5ldCIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX2tubiA9IGxybigiY2xhc3NpZi5ra25uIiwgcHJlZGljdF90eXBlID0gInByb2IiKQpscm5fbGRhID0gbHJuKCJjbGFzc2lmLmxkYSIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX25uZXQgPSBscm4oImNsYXNzaWYubm5ldCIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX3JmID0gbHJuKCJjbGFzc2lmLnJhbmdlciIsIHByZWRpY3RfdHlwZSA9ICJwcm9iIikKbHJuX3N2bSA9IGxybigiY2xhc3NpZi5zdm0iLCBwcmVkaWN0X3R5cGUgPSAicHJvYiIpCmxybl94Z2Jvb3N0ID0gbHJuKCJjbGFzc2lmLnhnYm9vc3QiLCBwcmVkaWN0X3R5cGUgPSAicHJvYiIpCgpscm5fcnBhcnQgPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl9ycGFydCkgJT4+JSB0aHJlc2hvbGQyKSAKbHJuX2dsbW5ldCA8LSBHcmFwaExlYXJuZXIkbmV3KHByZV9wcm9jZXNhbWllbnRvICU+PiUgcG8obHJuX2dsbW5ldCkgJT4+JSB0aHJlc2hvbGQyKSAKbHJuX2tubiA8LSBHcmFwaExlYXJuZXIkbmV3KHByZV9wcm9jZXNhbWllbnRvICU+PiUgcG8obHJuX2tubikgJT4+JSB0aHJlc2hvbGQyKSAKbHJuX2xkYSA8LSBHcmFwaExlYXJuZXIkbmV3KHByZV9wcm9jZXNhbWllbnRvICU+PiUgcG8obHJuX2xkYSkgJT4+JSB0aHJlc2hvbGQyKSAKbHJuX25uZXQgPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl9ubmV0KSAlPj4lIHRocmVzaG9sZDIpIApscm5fcmYgPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl9yZikgJT4+JSB0aHJlc2hvbGQyKSAKbHJuX3N2bSA8LSBHcmFwaExlYXJuZXIkbmV3KHByZV9wcm9jZXNhbWllbnRvICU+PiUgcG8obHJuX3N2bSkgJT4+JSB0aHJlc2hvbGQyKSAKbHJuX3hnYm9vc3QgPC0gR3JhcGhMZWFybmVyJG5ldyhwcmVfcHJvY2VzYW1pZW50byAlPj4lIHBvKGxybl94Z2Jvb3N0KSAlPj4lIHRocmVzaG9sZDIpIAoKbHJuX3JwYXJ0JHByZWRpY3Rfc2V0cyA9IGMoInRyYWluIiwgInRlc3QiKQpscm5fZ2xtbmV0JHByZWRpY3Rfc2V0cyA9IGMoInRyYWluIiwgInRlc3QiKQpscm5fa25uJHByZWRpY3Rfc2V0cyA9IGMoInRyYWluIiwgInRlc3QiKQpscm5fbGRhJHByZWRpY3Rfc2V0cyA9IGMoInRyYWluIiwgInRlc3QiKQojbHJuX2xvZ19yZWckcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCmxybl9ubmV0JHByZWRpY3Rfc2V0cyA9IGMoInRyYWluIiwgInRlc3QiKQpscm5fcmYkcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCmxybl9zdm0kcHJlZGljdF9zZXRzID0gYygidHJhaW4iLCAidGVzdCIpCmxybl94Z2Jvb3N0JHByZWRpY3Rfc2V0cyA9IGMoInRyYWluIiwgInRlc3QiKQoKbHJuX3JwYXJ0JGlkID0gIsOBcmJvbCIKbHJuX2dsbW5ldCRpZCA9ICJSZWctcmVnIgpscm5fa25uJGlkID0gIkstdmVjaW5vcyIKbHJuX2xkYSRpZCA9ICJMREEiCiNscm5fbG9nX3JlZyRpZCA9ICJSZWctbG9nIgpscm5fbm5ldCRpZCA9ICJSZWQtTmV1ciIKbHJuX3JmJGlkID0gIlJhbmRvbUZvcmVzdCIKbHJuX3N2bSRpZCA9ICJTVk0iCmxybl94Z2Jvb3N0JGlkID0gIlhHQm9vc3QiCgpsZWFybmVyczIgPSBsaXN0KAogIGxybl9ycGFydCwKICBscm5fZ2xtbmV0LAogIGxybl9rbm4sCiAgbHJuX2xkYSwKICAjbHJuX2xvZ19yZWcsCiAgbHJuX25uZXQsCiAgbHJuX3JmLAogIGxybl9zdm0sCiAgbHJuX3hnYm9vc3QKKQoKCmBgYAoKIyMgRGVmaW5jaW9uIGRlbCBiZW5jaG1hcmsKYGBge3J9CmRlc2lnbjIgPSBiZW5jaG1hcmtfZ3JpZCh0YXNrX3RhcmosIGxlYXJuZXJzMiwgcmVzYW1wbGluZ3MpCgpgYGAKCgojIyBFamVjdWNpb24KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZnV0dXJlOjpwbGFuKCJtdWx0aXByb2Nlc3MiKQoKYm1yMiA9IGJlbmNobWFyayhkZXNpZ24yKQpgYGAKCiMjIE1lZGlkYXMKCgpgYGB7cn0KCmJtcjIkYWdncmVnYXRlKG1lYXN1cmVzKQoKYGBgCgoKYGBge3J9Cgp0YWIyID0gYm1yMiRhZ2dyZWdhdGUobWVhc3VyZXMpCgpyYW5rczIgPSB0YWIyWywgLihsZWFybmVyX2lkLCByYW5rX3RyYWluID0gcmFuaygtYWNjX3RyYWluKSwgcmFua190ZXN0ID0gcmFuaygtYWNjX3Rlc3QpKSwgYnkgPSB0YXNrX2lkXQpwcmludChyYW5rczIpCmBgYAoKIyMgR3JhZmljb3MgY29tcGFyYXRpdm9zCgoKYGBge3J9CmF1dG9wbG90KGJtcjIkY2xvbmUoZGVlcCA9IFRSVUUpLCB0eXBlID0gInJvYyIpCgpgYGAKCgojIyMgQXJlYSBiYWpvIGxhIGN1cnZhIGRlIFJPQwpgYGB7cn0KYXV0b3Bsb3QoYm1yMiwgbWVhc3VyZSA9IG1zcigiY2xhc3NpZi5hdWMiKSkgKyAKICAgICAgICAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQoKCmBgYAoKCiMjIyBQcmVjaXNpb24KYGBge3J9CmF1dG9wbG90KGJtcjIsIG1lYXN1cmUgPSBtc3IoImNsYXNzaWYuYWNjIikpICsgCiAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKCgpgYGAKCiMjIyBTZW5zaXRpdmlkYWQgKHRwcikKYGBge3J9CmF1dG9wbG90KGJtcjIsIG1lYXN1cmUgPSBtc3IoImNsYXNzaWYudHByIikpICsgCiAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKCgpgYGAKCiMjIyBQcmVjaWNzaW9uIChwcHYpCmBgYHtyfQphdXRvcGxvdChibXIyLCBtZWFzdXJlID0gbXNyKCJjbGFzc2lmLnBwdiIpKSArIAogICAgICAgICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpCgoKYGBgCgojIyMgQ29zdG8KYGBge3J9CmF1dG9wbG90KGJtcjIsIG1lYXN1cmUgPSBjb3N0X21lYXN1cmUpICsgCiAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKCgpgYGAKCmBgYHtyfQoKIyBscm5fcmZfMiA9IGxybl9yZgojIAojIGxybl9yZl8yJHRyYWluKHRhc2tfdGFyaiwgcm93X2lkcyA9IHRyYWluX3NldCkKIyBwcmVkX2ZyID0gbHJuX3JmXzIkcHJlZGljdCh0YXNrX3RhcmosIHJvd19pZHMgPSB0ZXN0X3NldCkKIyAKIyBwcmVkX2ZyJGNvbmZ1c2lvbgoKYGBgCgpgYGB7cn0KCiMgbHJuX3hnYm9vc3RfMiA9IGxybl94Z2Jvb3N0CiMgCiMgbHJuX3hnYm9vc3RfMiR0cmFpbih0YXNrX3RhcmosIHJvd19pZHMgPSB0cmFpbl9zZXQpCiMgcHJlZF94ZyA9IGxybl94Z2Jvb3N0XzIkcHJlZGljdCh0YXNrX3RhcmosIHJvd19pZHMgPSB0ZXN0X3NldCwgKQojIAojIHByZWRfeGckY29uZnVzaW9uCgoKYGBgCgoKCgo=